package EDT.obj;

// cferie.java
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;

public class Cferie {
   private Calendar datePaques = new GregorianCalendar();
   private int annee;
   private int a,b,c,d,e,f,g,h,i,k,l,m,n,p;
   private Calendar jourFerie = new GregorianCalendar();

   private ArrayList<Date> lesJoursFerie= new ArrayList<>();
   
   
   public Cferie (Calendar dPaques){
     datePaques = dPaques;
     annee = datePaques.get(Calendar.YEAR);
     a = annee%19;
     b = annee/100;
     c = annee%100;
     d = b/4;
     e = b%4;
     f = (b+8)/25;
     g = (b-f+1)/3;
     h = (19*a+b-d-g+15)%30;
     i = c/4;
     k = c%4;
     l = (32+2*e+2*i-h-k)%7;
     m = (a+11*h+22*l)/451;
     n = (h+l-7*m+114)/31;
     p = (h+l-7*m+114)%31;
     calcule();
   }


  private Calendar aFerie (int rang){
    // initialisation avec le dimancche de paques
    jourFerie.set(annee, n-1, p+1);
    if (rang == 1) {
      // jour de l'an
      jourFerie.set(annee, 0, 1);
    }
    if (rang == 2) {
      // lundi de paques
      jourFerie.add(Calendar.DATE,1);
    }
    if (rang == 3) {
      // 1er mai
      jourFerie.set(annee, 4, 1);
    }
    if (rang == 4) {
      // 8 mai
      jourFerie.set(annee, 4, 8);
    }
    if (rang == 5) {
      // jeudi de l'ascension
      jourFerie.add(Calendar.DATE,39);
    }
    if (rang == 6) {
      // lundi de pentecote
      jourFerie.add(Calendar.DATE,50);
    }
    if (rang == 7) {
      // 14 juillet
      jourFerie.set(annee, 6, 14);
    }
    if (rang == 8) {
      // 15 aout assomption
      jourFerie.set(annee, 7, 15);
    }
    if (rang == 9) {
      // 1er novembre toussaint
      jourFerie.set(annee, 10, 1);
    }
    if (rang == 10) {
      // 11 novembre 
      jourFerie.set(annee, 10, 11);
    }
    if (rang == 11) {
      // 25 decembre noel
      jourFerie.set(annee, 11, 25);
    }

    return jourFerie;
  }
  
  private void calcule(){
      
      for (int kk=1; kk<=11; kk++)
      lesJoursFerie.add(aFerie(kk).getTime());
  }

    public ArrayList<Date> getLesJoursFerie() {
        return lesJoursFerie;
    }
  
  
  public static void main(String[] args){
      
      Calendar dateCourante = new GregorianCalendar();
      dateCourante.add(Calendar.YEAR, 1);
      Cferie c = new Cferie(dateCourante);
      DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
      for (Date t : c.getLesJoursFerie() ) {
          System.out.println(dateFormat.format(t.getTime()));
      }
      
      
  }
 
}
